package 链表;

/**
 * @ClassName : _203_移除链表元素_添加一个虚拟头结点
 * @Author : 骆发茂
 * @Date: 2021/12/7 22:04
 * @Description :https://leetcode-cn.com/problems/remove-linked-list-elements/
 */
public class _203_移除链表元素_添加一个虚拟头结点 extends ListNode{
    _203_移除链表元素_添加一个虚拟头结点(int x) {
        super(x);
    }

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode removeElements(ListNode head, int val) {
            //创建虚拟头节点
            //val随意，不是null即可
            ListNode fakeNode = new ListNode(0);
            fakeNode.next = head;
            ListNode prev = fakeNode;
            //添加fake头节点，后面的解法都是一样的
            //连接的下一节点的val==val，就跳过连接，连接下下个节点
            //否则就找下节点继续开始判断
            //直到最后的连接是null
            while(prev.next!=null){
                if(prev.next.val ==val){
                    prev.next = prev.next.next;
                }
                else{
                    prev = prev.next;
                }
            }
            return fakeNode.next;

        }}

}